#define eg '\t'
#define ty0 "------------------------"
#define ty "------------------"
//课程信息表
typedef struct{
    int id;         //课程id
    char *name;     //课程名
    char *nature;   //课程性质
    int period;     //课程学时
    float credit;   //课程学分
    int num;        //课程已选人数
    int max_num;    //可容纳最大人数
}Subject;

//课程表（以链表形式连接）
typedef struct node{
    Subject sub;
    struct node *next;
}Subjects;

//学生信息表
typedef struct{
    int id;             //学生学号
    char *name;         //学生姓名
    Subjects *subs;     //学生已选课程
    float sum_credit;     //学生已选课程总计学分
    int num_sub;        //学生已选课程数量
}Student;

//学生表（以链表形式连接）
typedef struct node2{
    Student stu;
    struct node2 *next;
}Students;

//学生课程信息总表
typedef struct{
    int num_subject;    //课程数量
    int num_student;    //学生数量
    Subjects *sub;      //课程表节点
    Students *stu;      //学生表节点
}Data;

//返回数据及说明
typedef struct{
    int code;       //返回标识符
    Students *stus;  //返回的学生表
    Subjects *subs;  //返回的课程表
    char *msg;      //返回数据说明
}BackCall;

BackCall put_stu(Student stu);   //添加学生信息

BackCall get_stu_all();             //获取所有学生信息

BackCall get_stu_id(int id);        //根据id获取学生信息

BackCall get_stu_name(char *name);  //根据姓名获取学生信息

BackCall update_stu(Student stu);   //修改学生信息

BackCall delete_stu_id(int id);     //根据id删除学生信息

BackCall put_sub(Subject sub);   //添加课程信息

BackCall get_sub_all();             //获取所有课程信息

BackCall get_sub_id(int id);        //根据id获取课程信息

BackCall update_sub(Subject sub);    //修改课程信息

BackCall delete_sub_id(int id);     //根据id删除学生信息

BackCall put_sub_by_stu(Student stu, Subject sub);  //绑定学生与课程关系

BackCall get_sub_by_stu(Student stu);   //获取学生所选课程信息

BackCall get_sub_by_not_stu(int id);

BackCall get_stu_by_sub(Subject sub);

BackCall remove_sub_by_stu(Student stu, Subject sub);    //解除学生与课程关系

int show_stu(Students *stus);       //进入学生管理界面

int show_sub(Subjects *subs);       //进入课程管理界面

int show_ele();                     //进入选课界面

void free_sub(Subject sub);

void free_stu(Student stu);

void free_subs(Subjects *subs);

void free_stus(Students *stus);

void free_call(BackCall call);

void init_link();                   //初始化数据

void close_link();                  //结束处理数据
